package com.chuanyang.driverh.utils;

import android.content.Context;
import android.text.TextUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * 日期转化工具
 * 
 * @author lanyan
 * 
 */
public class DateUtil {

	/**
	 * 将long型格式转化为所需格式的日期，以字符串返回
	 *
	 * @param time    需要转化的时间，单位是毫秒
	 * @param pattern 待转化的格式
	 * @return
	 */
	public static String format(long time, String pattern) {
		if (time < 0 || TextUtils.isEmpty(pattern)) {
			return "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.CHINA);
		Date dt = new Date(time);
		return sdf.format(dt);
	}

	/**
	 * 将string型格式转化为所需格式的日期，以字符串返回
	 *
	 * @param time     需要转化的时间
	 * @param previous 转化前的格式
	 * @param pattern  待转化的格式
	 * @return
	 */
	public static String format(String time, String previous, String pattern) {
		if (TextUtils.isEmpty(time) || TextUtils.isEmpty(pattern)) {
			return "";
		}
		SimpleDateFormat sdf1 = new SimpleDateFormat(previous, Locale.CHINA);
		SimpleDateFormat sdf2 = new SimpleDateFormat(pattern, Locale.CHINA);
		try {
			Date dt = sdf1.parse(time);
			return sdf2.format(dt);
		} catch (ParseException e) {
			e.printStackTrace();
		}

		return "";
	}

	/**
	 * 获取未来七天的日期
	 */
	public static ArrayList<String> getDataNextWeek(int intervals) {
		ArrayList<String> dates = new ArrayList();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Calendar c = Calendar.getInstance();
		for (int i = 0; i <= intervals; i++) {
			if (i == 0) {
				c.add(Calendar.DATE, 0);

			} else {
				c.add(Calendar.DATE, 1);

			}
			Date monday = c.getTime();
			String data = sdf.format(monday);
			dates.add(data);
		}
		dates.add(0, "装车时间");
		return dates;
	}

	/**
	 * 获取与当前时间的间隔毫秒数
	 *
	 * @param time
	 * @param pattern
	 * @return
	 */
	public static long getIntervalTime(String time, String pattern) {
		DateFormat df = new SimpleDateFormat(pattern, Locale.CHINA);
		try {
			Date date = df.parse(time);
			return date.getTime();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return 0;
	}
	/**
	 * 获取与当前时间的间隔天 时 分 秒
	 *
	 * @param time
	 * @param pattern
	 * @return
	 */
	public static long getSpaceTime(String time, String pattern) {
		DateFormat df = new SimpleDateFormat(pattern, Locale.CHINA);
		try {
			Date date = df.parse(time);
			return date.getTime();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return 0;
	}

	/**
	 * 大于一周显示年月日，一周以内两天以上显示周几，一天以上显示昨天上午，一天以内显示下午几点
	 *
	 * @param context
	 * @return
	 */
	public static String calculateTimeBySec(Context context) {
		long recodetime=0;
		if ( SharedPrefUtil.getPreferences( "time" + SharedPrefUtil.getUserId(), 0)!=null){
			recodetime = SharedPrefUtil.getPreferences( "time" + SharedPrefUtil.getUserId(), 0);
		}


		long currenttime = System.currentTimeMillis();
		long time = currenttime - recodetime;

		if (currenttime == 0) {
			return null;
		}
		long days = (int) (time / 86400000);
		Date date = new Date(recodetime);
		//转换提日期输出格式
		if (days > 7) {

			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//yyyy-MM-dd HH:mm:ss
			return dateFormat.format(date);
		}
		if (days >= 2 && days < 7) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE");
			return dateFormat.format(date);
		}
		if (days >= 1 && days < 2) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("HH");//yyyy-MM-dd HH:mm:ss 1490838840
			String currenthour = dateFormat.format(date);
			int currenhourint = Integer.parseInt(currenthour);
			if (currenhourint < 12) {
				return "昨天上午";
			} else {

				return "昨天下午";
			}
		}
		if (days < 1) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("HH");//yyyy-MM-dd HH:mm:ss 1490838840
			String currenthour = dateFormat.format(date);
			int currenhourint = Integer.parseInt(currenthour);
			if (currenhourint < 12) {
				return "上午" + currenthour + "点";
			} else {
				return "下午" + currenthour + "点";
			}
		}
		return "";
	}


	/**
	 * 比较2个时间的大小
	 *
	 * @return 1 第一个时间迟;-1 第二个时间迟;0 相等
	 */
	public static int compareDates(String time1, String format1, String time2,
                                   String format2) {
		if (TextUtils.isEmpty(time1) || TextUtils.isEmpty(time2)
				|| TextUtils.isEmpty(format1) || TextUtils.isEmpty(format2)) {
			return 0;
		}
		try {
			SimpleDateFormat sdf1 = new SimpleDateFormat(format1, Locale.CHINA);
			SimpleDateFormat sdf2 = new SimpleDateFormat(format2, Locale.CHINA);
			Date d1 = sdf1.parse(time1);
			Date d2 = sdf2.parse(time2);
			if (d1.after(d2)) {
				return 1;
			} else if (d1.before(d2)) {
				return -1;
			} else {
				return 0;
			}
		} catch (Exception e) {
			return 0;
		}
	}
}
